const express = require('express')


const app = express()
const joi=require('joi')

// 导入使用cors中间件
const cors=require('cors')

app.use(cors())

// 导入配置文件
const config=require('./config')

// 解析token的中间件
const expressJWT=require('express-jwt')

// 使用解析token的中间件，配置密钥，unless指定哪些接口不需要token验证
app.use(expressJWT({secret:config.jwtSecretKey}).unless({
    path:[/^\/api\//]
}))

// 配置解析 `application/x-www-form-urlencoded` 格式的表单数据的中间件
app.use(express.urlencoded({extended:false}))


// 导入登录注册路由
const userRouter=require('./router/user')
app.use('/api',userRouter)

// 引入用户信息路由
const userinfoRouter=require('./router/userinfo')
app.use('/my',userinfoRouter)

// 引入文章分类路由
const artCateRouter=require('./router/artcate')
// 为文章分类的路由挂载统一的访问前缀 /my/article
app.use('/my/article',artCateRouter)


// 管理文章的路由
const articleRouter=require('./router/article')
app.use('/my/article',articleRouter)


// 错误中间件
app.use((err,req,res,next)=>{
    // 表单验证规则错误
    if(err instanceof joi.ValidationError){
        return res.send({
            status:201,
            msg:err.message
        })
    }

    // token验证错误
    if(err.name==='UnauthorizedError'){
        return res.send({
            status:201,
            msg:"token验证失败"
        })
    }
    // 其他错误
    res.send({
        status:201,
        msg:err.message
    })
})

app.listen(3007, () => {
    console.log("server is running")
})